package com.zmn.oms.third.base.util;

import java.math.BigDecimal;

import static java.lang.Math.*;

/** 百度地图坐标和火星坐标转换
 * Created on 2021-01-07 from csdn
 */

public class CoodinateCovertor {

    private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;

    /**
     * 对double类型数据保留小数点后多少位
     *  高德地图转码返回的就是 小数点后6位，为了统一封装一下
     * @param digit 位数
     * @param in 输入
     * @return 保留小数位后的数
     */
    static double dataDigit(int digit,double in){
        return new BigDecimal(in).setScale(6,   BigDecimal.ROUND_HALF_UP).doubleValue();

    }

    /**
     * 将火星坐标转变成百度坐标 ,火星坐标包括高德、腾讯地图坐标等
     * @param  longitude，经度
     * @param  lantitude，维度
     */

    public static double[] bd_encrypt(double longitude,double lantitude)
    {
        double[] lnglat = {0.0,0.0};

        double x = longitude, y = lantitude;
        double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_pi);
        double theta = atan2(y, x) + 0.000003 * cos(x *  x_pi);

        lnglat[0] = dataDigit(6,z * cos(theta) + 0.0065);
        lnglat[1] = dataDigit(6,z * sin(theta) + 0.006);

        return lnglat;
    }

    /**
     * 将百度坐标转变成火星坐标
     * @param  longitude，经度
     * @param  lantitude，维度
     */
    public static double[] bd_decrypt(double longitude,double lantitude)
    {
        double[] lnglat = {0.0,0.0};

        double x = longitude - 0.0065, y = lantitude - 0.006;
        double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);
        double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);

        lnglat[0] = dataDigit(6,z * cos(theta));
        lnglat[1] = dataDigit(6,z * sin(theta));

        return lnglat;
    }
}
